package engine;

import java.util.List;


public class SearchEngine {
	private String SITE = "";
	
	private String CODNUMERO = "";
	private String CODDATA = "";
	private String CONECTIVO = "";
	private String CONECTOR = "+";
	private String CODDATAINICIO = "";
	private String CODDATAFIM = "";
	private String CODEPESQUISA = "";
	private String DATACONECTOR= "";
	private String TITULO = "";
	private String MINISTRO = "";
	private String ORGAO = "";
	private String AUTORIDADE = "";
	private String LOCALIDADE = "";
	private String APELIDO = "";
	
	private String LINK = "";
	private String TIPO = "";

	private String linkResultado;
	private String parametros = "";
	private boolean pesquisaLivreAtivada = false;
	private String pesquisaLivre = "";
	
	private LeitorDeConfiguracoes leitor;
	

	public SearchEngine(String nomeDoArquivo) {
		leitor = new LeitorDeConfiguracoes(nomeDoArquivo);
		List<String> valores = leitor.getValores();
		List<String> variaveis = leitor.getVariaveis();
		for (int k =0; k < variaveis.size(); k++) {
			if (variaveis.get(k).equalsIgnoreCase("SITE")) {
				SITE = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("CODNUMERO")) {
				CODNUMERO = valores.get(k);	
			} else if (variaveis.get(k).equalsIgnoreCase("CODDATA")) {
				CODDATA = valores.get(k);	
			} else if (variaveis.get(k).equalsIgnoreCase("CODDATAINICIO")) {
				CODDATAINICIO = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("CODDATAFIM")) {
				CODDATAFIM = valores.get(k);	
			} else if (variaveis.get(k).equalsIgnoreCase("CODEPESQUISA")) {
				CODEPESQUISA = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("LINK")) {
				LINK = SITE + valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("TIPO")) {
				TIPO = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("AUTORIDADE")) {
				AUTORIDADE = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("LOCALIDADE")) {
				LOCALIDADE = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("TITULO")) {
				TITULO = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("APELIDO")) {
				APELIDO = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("CONECTIVO")) {
				CONECTIVO = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("CONECTOR")) {
				CONECTOR = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("MINISTRO")) {
				MINISTRO = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("DATACONECTOR")) {
				DATACONECTOR = valores.get(k);
			} else if (variaveis.get(k).equalsIgnoreCase("ORGAO")) {
				ORGAO = valores.get(k);
			}
		}
		for (int k =0; k < variaveis.size(); k++) {
			System.out.println(variaveis.get(k) + " = " + valores.get(k));
		}
	}
    /**
     *  Método que produz o link para pesquisa no site.
     * @param numero Número de ???
     * @param datainicio Busca a partir da data especificada.
     * @param datafim Busca antes da data especificada.
     * @param ministro Busca documentos do ministro especificado.
     * @param orgao Orgão ao qual pertence os documentos.
     * @param sumula True, se deseja ter súmulas nos resultados.
     * @param acordao True, se deseja ter Acórdãos nos resultados.
     * @param decisoes True, se deseja ter Decisões Jurídicas nos resultados.
     * @param infojur True, se deseja ter Inf. Jurisprudência nos resultados
     * @return
     */
	public String pesquisa(String livre, String numero, String datainicio, String datafim, String ministro, String orgao,
					String autoridade, String localidade, String titulo, String apelido) {
		linkResultado = "";
		if (numero != null) {
			if (CODNUMERO != "") {
			adicionaParametros(CONECTOR + CODNUMERO.replaceAll("!NUM", numero+""));
			} else adicionaAPesquisaLivre("processo+"+numero);
		}
		if (!((CODDATA == "") && (CODDATAINICIO == "") && (CODDATAFIM == ""))) {
			if ((datainicio != null) && (datafim != null)) {
				adicionaParametros(CONECTOR + CODDATA + CODDATAINICIO.replaceFirst("AAAAMMDD", datainicio) 
						+ DATACONECTOR + CODDATAFIM.replaceFirst("AAAAMMDD", datafim));
			} else {
				if (datainicio != null) {
					adicionaParametros(CONECTOR + CODDATA + CODDATAINICIO.replaceFirst("AAAAMMDD", datainicio));
				}
				if (datafim != null) {
					adicionaParametros(CONECTOR + CODDATA + CODDATAFIM.replaceFirst("AAAAMMDD", datafim));
				}
			}
		}
		if ((MINISTRO != "") && (ministro != null)) {
			String campo = MINISTRO.replace("!NOME", ministro.replace(" ",CONECTIVO));
			adicionaAPesquisaLivre(campo);
		} else if ((MINISTRO == "") && (ministro != null)) {
			//adicionaAPesquisaLivre(ministro.replace(" ", CONECTIVO));
		}
		if ((ORGAO != "") && (orgao != null)) {
			String campo = ORGAO.replace("!NOME", orgao.replace(" ",CONECTIVO));
			adicionaAPesquisaLivre(campo);
		} else if ((ORGAO == "") && (orgao != null)) {
			//adicionaAPesquisaLivre(orgao.replace(" ", CONECTIVO));
		}
		if (livre != null) {
			adicionaAPesquisaLivre(livre);
		}
		
		if((AUTORIDADE != "") && (autoridade != null)) {
			autoridade = autoridade.replace(" ", "+");
			adicionaParametros(CONECTOR + AUTORIDADE + autoridade);
		}
		if((LOCALIDADE != "") && (localidade != null)) {
			localidade = localidade.replace(" ", "+");
			adicionaParametros(CONECTOR + LOCALIDADE + localidade);
		}
		if((APELIDO != "") && (apelido != null)) {
			apelido = apelido.replace(" ", "+");
			adicionaParametros(CONECTOR + APELIDO + apelido);
		}
		if((TITULO != "") && (titulo != null)) {
			titulo = titulo.replace(" ", "+");
			adicionaParametros(CONECTOR + TITULO + titulo);
		}
		
		linkResultado = LINK;
		
		adicionaParametrosAoArrayLinks();
		parametros = "";
		pesquisaLivre = "";
		pesquisaLivreAtivada = false;
		return linkResultado;
		
	}
	/**
	 * Adiciona parâmetros a URL.
	 * @param novoParametro Um novo parâmetro.
	 */
	private void adicionaParametros(String novoParametro) {
		parametros += novoParametro;
	}
	
	private void adicionaAPesquisaLivre(String novoParametro) {
		novoParametro = novoParametro.replace(" ", "+");
		if (pesquisaLivreAtivada) {
			pesquisaLivre+= CONECTIVO + novoParametro;
		} else {
			pesquisaLivre = CONECTOR + CODEPESQUISA + novoParametro;
			pesquisaLivreAtivada = true;
		}
	}
	/**
	 * Adiciona a lista de parâmetros formada a lista de Links.
	 */
	private void adicionaParametrosAoArrayLinks() {
		linkResultado = linkResultado + pesquisaLivre + parametros;
	}
	
	public String getTipoDaEngine() {
		return TIPO;
	}
}